package cn.tedu.carehome.foundation.mapper;

import cn.tedu.carehome.foundation.pojo.dto.FoodPackageUpdateDTO;
import cn.tedu.carehome.foundation.pojo.dto.FoodUpdateDTO;
import cn.tedu.carehome.foundation.pojo.dto.OlderFoodPackageUpdateDTO;
import cn.tedu.carehome.foundation.pojo.entity.Food;
import cn.tedu.carehome.foundation.pojo.entity.FoodPackage;
import cn.tedu.carehome.foundation.pojo.entity.OlderFoodPackage;
import cn.tedu.carehome.foundation.pojo.vo.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 处理餐品数据的Mapper接口
 *
 * @author 袁田
 * @version 0.0.1
 */
@Repository
public interface FoodPackageMapper {
    /**
     * 插入套餐数据
     *
     * @param foodPackage 套餐数据
     * @return 受影响的行数
     */
    int insert(FoodPackage foodPackage);

    /**
     * 根据id删除套餐
     * @param id 套餐的id
     * @return 受影响的行数
     */
    int deleteById(Long id);



    /**
     * 根据套餐名称统计数据的数量
     * @param name 套餐名称
     * @return 匹配套餐名称的套餐数据的数量
     */
    int countByName(String name);

    /**
     * 根据套餐名称统计数据的数量
     * @param id 套餐名称
     * @return 匹配套餐id的套餐数据的数量
     */
    int countById(Long id);

    /**
     *
     * @return 由套餐对象组成的列表
     */
    List<FoodPackageAdminVO> selectAdmin();

    List<FoodPackageAdminVO> selectAdminByPage();



    /**
     * 根据id查询套餐信息
     * @param id 请求套餐的id
     * @return 对应id的套餐信息
     */

    FoodPackageUpdateVO selectById(Long id);


    /**
     * 修改套餐
     * @param foodPackageUpdateDTO 客户端传来的套餐对象
     */
    void update(FoodPackageUpdateDTO foodPackageUpdateDTO);



    /**
     *检查套餐下面有没有绑定餐品
     * @param foodPackageId 套餐id
     * @return 绑定餐品的数量
     */
    int countFoodByFoodPackageId(Long foodPackageId);

    /**
     * 检查同名但是不同id的套餐数量
     * @param name 套餐的名字
     * @return 数量
     */
    int countByNameAndNotId(String name,Long id);

    /**
     *
     *
     * 以下是老人与套餐相关表的mapper
     *
     *
     *
     *
     */


    /**
     * 插入老人与套餐关联数据
     *
     * @param olderFoodPackage 关联表id
     * @return 受影响的行数
     */
    int insertLink(OlderFoodPackage olderFoodPackage);

    /**
     * 根据id删除套餐老人关联
     * @param id 关联的id
     * @return 受影响的行数
     */
    int deleteLinkById(Long id);


    /**
     *查询老人套餐关联列表
     * @return 由老人套餐关联对象组成的列表
     */
    List<OlderFoodPackageLinkListItemVO> selectLink();

    /**
     * 更改套餐匹配
     *
     */
    int updateLink(OlderFoodPackageUpdateDTO olderFoodPackageUpdateDTO);

    /**
     *
     * 根据关联老人id查询关联详情
     *
     */
    OlderFoodPackageStandardVO selectLinkStandardByOlder(Long id);

    /**
     *
     * 根据关联表id查询关联详情
     *
     */
    OlderFoodPackageStandardVO selectLinkStandardById(Long id);


}
